package eteam.aps.service;

import eteam.aps.common.helper.JsonPage;
import eteam.aps.model.dto.ArrivalVouchQueryDto;
import eteam.aps.model.dto.ArrivalVouchUpdateDto;
import eteam.aps.model.entity.arrival.ArrivalRepository;
import eteam.aps.model.entity.arrival.ArrivalVouch;
import eteam.aps.model.vo.arrival.ArrivalRepositoryVo;
import eteam.aps.model.vo.arrival.ArrivalVouchShowVo;
import eteam.aps.model.vo.arrival.ArrivalVouchVo;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 到货单;U8到货单 业务层
 *
 * @author LiuLei
 */
public interface ArrivalVouchService {

    /**
     * 查询到货单信息
     *
     * @param bar 到货单条码
     * @return 到货单
     * @throws Exception 异常
     */
    ArrivalVouchShowVo selByBar(String bar) throws Exception;

    /**
     * 查询到货单信息
     *
     * @param code 到货单单据号
     * @return 到货单集
     * @throws Exception 异常
     */
    List<ArrivalVouchShowVo> selByCode(String code) throws Exception;

    /**
     * 修改到货单信息
     *
     * @param list 到货单信息 修改
     * @return 修改的条数
     */
    int updateAv(List<ArrivalVouchUpdateDto> list) throws Exception;

    /**
     * 分页查 到货单信息
     *
     * @param arrivalVouchQueryDto 查询条件
     * @return 到货单信息
     */
    JsonPage<ArrivalVouchShowVo> selJSP(ArrivalVouchQueryDto arrivalVouchQueryDto);

    /**
     * 获取本地到货单信息
     *
     * @param bar 条码
     * @return 到货单信息
     */
    Set<ArrivalVouch> selPurByBar(String bar);

    /**
     * 写入入库单
     *
     * @param map 入库单信息
     * @return tradeid
     */
    String saveOtherGoodEntry(Map<String, Object> map) throws Exception;

    /**
     * 根据单据号查询到货单信息
     *
     * @param code 单据号
     * @return 到货单数据集
     */
    Set<ArrivalVouchVo> selPurByCode(String code);

    /**
     * 撤销到货单合格状态
     *
     * @param fId 内码
     */
    void cancelAv(String fId) throws Exception;

    /**
     * 生成一张入库单
     *
     * @param repository 头部信息
     * @return 入库单信息
     */
    ArrivalRepositoryVo getRepository(ArrivalRepository repository);

    /**
     * 生成一U8入库单
     *
     * @param repository 入库单信息
     * @return 入库信息
     */
    String saveRepository(ArrivalRepositoryVo repository) throws Exception;


    /**
     * 根据储位编号和名称查看库存是否存在
     * @param code 储位编号
     * @param name 储位名称
     * @return 库存数
     */
    Integer findCurrentIsExistsByPositionCodeAndName(String code, String name);
}
